#include <iostream>

using namespace std;
const int N = 1e5 + 3;
int arr[N];
int d[N]; // 差分数组

void solve(int n, int m)
{
    
    for (int i = 1; i <= n; i++)
    {
        cin >> arr[i];
    }
    //创建差分
    for (int i = 1; i <= n; i++)
    {
        d[i] = arr[i] - arr[i - 1];
    }
    //处理差分,取决于m的次数
    while (m--)
    {
        int l, r, v;//l为区间左边界，r为右,v为要加上的值
        cin >> l >> r >> v;
        d[r + 1] -= v;//r+1不在区间，要想其的值不被影响
        d[l] += v;

    }
    //处理完之后，前缀和还原
    for (int i = 1; i <= n; i++)
    {
        arr[i] = arr[i - 1] + d[i]; // d[i] = arr[i] - arr[i - 1];差分数组本质是两数差的值，减数+差可还原被减数
    }
    //打印
    for (int i = 1; i <= n; i++)
    {
        cout << arr[i] << " \n"[i == n];//当i为n时候换行
    }
}

int main()
{
    int n, m; // n为数组的个数，m为访问次数
    while (cin >> n >> m)
    {
        solve(n , m);//为了方便，这里用函数包装
    }
    return 0;
}